遊戲當中移動是重要的機制,用Bolt要怎麼進行不同移動機制的呢?首先當然是先進行移動到特定點的嘗試。
Bolt的Graph主要分成二個種類,其一是Flow Graph(FG)而另一個則是State Graph。Stage Graph會在之後再做詳細的介紹。而FG,之前稍微提及過。它和寫程式有著將近一比一的關聯性。而在Bolt的世界中,FG就是將變數、函式等用方塊方式表現,並搭配著連線於一個個方塊間,達成它的的推移順序,如同Flow一般,朝著某方向前進,而完成功能。這也是Flow Graph的核心概念。
Unity的生態中,已針對物件中的運作也明確的框架,故撰寫程式時,無需寫下main 函式當做進入點。每個物件上掛載了繼承MonoBehaviour(MB)的型別,而在MB中有對於該物件如何運行做規範。官網文件有詳細的介紹
而用Bolt,也是遵循這個規範。故在用Bolt進行四則運算時,就用物件的Start,也就是一開始時就進行這些行為測試。而Bolt中,就將其Start包成了一個Start事件,讓Graph隨著接收此事件進而展開後面的運作。然Start是只會執行一次的地方,若是對於某些行為需要持續進行,則要放入到會重覆運行到的函式中,通常(在簡易的做法下)會利用Update這個函式。而Bolt也將其包成一個Update事件。也就是接在此事件中後的行為會一直被重覆。
在這次主要根據不同的方式進行移動的嘗試中,想當然地,就必需要利用Update事件才用完成。
第一個範例,就是很直接的讓一個方塊從世界原點移動到固定的某一點。用Update事件做為驅動點,重覆進行物件位置的變更,進而達成物件在移動的感覺。且在此範例中放入了四個一樣行為的方塊,利用它們各自的變數而達成目的地不同的移動。
這個畫面是執行時所截圖的,在反覆運行時,Bolt會顯示它的Flow,讓開發者可以了解到它的運行狀態。這也是視覺化工具很重要的一點,不但是組合行為時是視覺化表現,且運行時一樣是視覺化呈現,對於非程式人員來說提供了最即時的反饋。
玩家按下AWSD進行移動是目前多數遊戲中要移動角色最廣泛的操作。利用了按下AWSD後Unity轉換成水平、垂直對應的值後,再不停的和目前的位置進行計算,而後再將計算值回存到物件現有的位置,而達成多方向移動。
這張是運行時的畫面,可看到它在移動,但因為沒有標地物所以看不太出來其移動。
除了AWSD移動外,另一個也很受歡迎的移動的方式就是滑鼠點擊後移動。這個移動算是這裡面移動最為複雜的。除了移動的判定外,也要搭配場景的設定。
整個流程為將場景進行NavMesh烘焙(Bake)的動作,而後將NavMesh Agent元件置於要移動的物件。這些就是大致的前置作業,而後就是要用Bolt來給予行為。
礙於對Bolt的方塊分類不了解,這段Bolt如何完成也是參考了此教學影片。
一但給予了場景中的目標位置,循路系統就會導引物件移動過去。
這個Sample裡嘗試了另一種按鍵事件的驅動方式,並搭配了複雜的Timer。欲達到的移動行為是一但按鍵按下去後,物件會隨機從四方向裡選一個方向移動,待一段時間後,會再進行選擇,如此反覆下去。
雖然此按鍵事件如同Start事件是屬於一次性的觸發,但觸發後,利用了Timer進行反覆性的運行,進而達成其功能。
這次不再利用世界坐標裡的位置,而是進行本地坐標的四方向操作,若是物件一開始有旋轉的角度,則它自己四方向的呈現從世界中去詮釋會看起來不太一樣,達成簡易的多變性。
而在這個範行進行中,發現了若是在Graph中產生一個變數,它雖然概念上是區域性變數,只能在此Graph中被看到、使用。但運行後停下來時,此變數的值會被改變而不會被復元,也就是從Bolt的角度去看,它反而像是某種全域性的變數。這點觀察到的現象不知是不是對於Bolt不了解所造成的,要避免它帶來的意外是日後使用上的重點之一。
移動和數個事件的了解到此告一段落,接下來就要進入到UI層面的銜接,觸發器的使用,和一些用Unity開發時少不了的功能實作。
在Unity 2019.3 beta環境中,有注意到每次關閉Editor時會很容易發生沒有回應,關不起來的狀況。不知道是Bolt的問題,Unity Beta版的問題,還是Bolt的圖沒有注意到什麼細節而引起的錯誤。要再觀察看看。
今日測試用的專案放罝在Git Repo中的unity-specific-bolt目錄裡。一樣Bolt外掛沒有置入,以防止侵權。若想深入了解,請自行購入並引用Bolt。